package redis

import (
	"context"
	"encoding/json"
	"fmt"
	"github.com/go-redis/redis/v8"
	"time"
)

var (
	_rdb *redis.Client
)

type JSONCodec struct{}

func (JSONCodec) Encode(v interface{}) ([]byte, error) {
	return json.Marshal(v)
}

func (JSONCodec) Decode(b []byte, v interface{}) error {
	return json.Unmarshal(b, v)
}
func InitRedis(host string, port int, password string, db int) {
	// 创建 Redis 客户端
	_rdb = redis.NewClient(&redis.Options{
		Addr:     fmt.Sprintf("%s:%d", host, port), // Redis 地址
		Password: password,                         // 密码（如果没有设置可为空）
		DB:       db,                               // 使用默认 DB
	})
	if _rdb != nil && _rdb.Ping(context.Background()).Err() == nil {
		fmt.Println("Redis 连接成功")
	} else {
		fmt.Println("Redis 连接失败")
	}
}
func GetValue(ctx context.Context, key string) *string {
	val, err := _rdb.Get(ctx, key).Result()
	if err != nil {
		return nil
	}
	return &val
}

func Delete(ctx context.Context, key string) {
	_rdb.Del(ctx, key)
}

//   设置过期时间

func SetValue(ctx context.Context, key string, value string) {
	_rdb.Set(ctx, key, value, 0)
}

// SetValueForExpireTime 设置过期时间 秒
func SetValueForExpireTime(ctx context.Context, key string, value string, expireTime int64) string {
	fmt.Printf("key:%s value:%s expireTime:%d", key, value, expireTime)
	return _rdb.Set(ctx, key, value, time.Duration(expireTime)*time.Second).Val()
}
